在昨天的文章中我們有設定了幾個不同的敵人的角色形象跟技能,今天我想聽挑一個角色時做出來,這裡一樣先問ChatGPT給我一個範例。
幫我用之前的技能架構時做暗影刺客(Shadow Assassin)的技能
根據你之前的技能架構,下面將會為「暗影刺客(Shadow Assassin)」設計對應的技能實現。首先,我們會使用之前的 ISkill
介面,然後實現該角色的三個技能:致命一擊(Fatal Strike)、暗影隱身(Shadow Cloak) 和 毒刃(Poisoned Blade)。
ISkill
)這是之前設計的 ISkill
介面,用來定義所有技能的基本操作:
public interface ISkill
{
void UseSkill(Character user, Character target);
}
public class FatalStrike : ISkill
{
public void UseSkill(Character user, Character target)
{
float damage = user.AttackPower * 2.0f; // 200%攻擊力傷害
target.TakeDamage(damage);
// 如果目標生命值低於20%,則有可能直接擊倒
if (target.Health < target.MaxHealth * 0.2f)
{
Debug.Log("Fatal Strike: Direct kill chance activated!");
target.Health = 0; // 直接擊殺
}
Debug.Log($"{user.Name} 使用了 致命一擊 對 {target.Name} 造成 {damage} 點傷害");
}
}
public class ShadowCloak : ISkill
{
public void UseSkill(Character user, Character target)
{
user.IsInvisible = true; // 設置隱身狀態
user.AttackPower *= 1.5f; // 攻擊力提升50%
Debug.Log($"{user.Name} 使用了 暗影隱身,攻擊力提升!");
}
}
public class PoisonedBlade : ISkill
{
private int poisonDuration = 4; // 持續4回合
private float poisonDamagePerTurn = 30.0f; // 每回合30點毒性傷害
public void UseSkill(Character user, Character target)
{
target.ApplyPoison(poisonDuration, poisonDamagePerTurn);
Debug.Log($"{user.Name} 使用了 毒刃,對 {target.Name} 造成持續毒性傷害!");
}
}
Character
類的擴展為了支援這些技能,你需要在 Character
類中擴展一些屬性,比如 IsInvisible
和 ApplyPoison
方法等:
public class Character
{
public string Name { get; private set; }
public float Health { get; set; }
public float MaxHealth { get; private set; }
public float AttackPower { get; set; }
public bool IsInvisible { get; set; }
// 基本構造函數
public Character(string name, float maxHealth, float attackPower)
{
Name = name;
MaxHealth = maxHealth;
Health = maxHealth;
AttackPower = attackPower;
IsInvisible = false;
}
// 承受傷害
public void TakeDamage(float damage)
{
Health -= damage;
if (Health < 0) Health = 0;
Debug.Log($"{Name} 受到了 {damage} 點傷害,剩餘血量: {Health}");
}
// 毒性傷害的應用
public void ApplyPoison(int duration, float damagePerTurn)
{
StartCoroutine(ApplyPoisonCoroutine(duration, damagePerTurn));
}
private IEnumerator ApplyPoisonCoroutine(int duration, float damagePerTurn)
{
for (int i = 0; i < duration; i++)
{
TakeDamage(damagePerTurn);
yield return new WaitForSeconds(1.0f); // 模擬每回合的延遲
}
}
}
在你的 PlayerController
或 AIController
中,你可以讓角色使用技能。比如,當玩家或AI控制的暗影刺客進行攻擊時,會根據情況選擇使用不同的技能。
public class PlayerController : MonoBehaviour
{
public Character player;
public Character enemy;
private ISkill fatalStrike;
private ISkill shadowCloak;
private ISkill poisonedBlade;
void Start()
{
player = new Character("Shadow Assassin", 100, 20);
enemy = new Character("Enemy", 120, 15);
fatalStrike = new FatalStrike();
shadowCloak = new ShadowCloak();
poisonedBlade = new PoisonedBlade();
}
void Update()
{
// 例如:當玩家按下某個按鍵時,使用相應技能
if (Input.GetKeyDown(KeyCode.Alpha1))
{
fatalStrike.UseSkill(player, enemy);
}
else if (Input.GetKeyDown(KeyCode.Alpha2))
{
shadowCloak.UseSkill(player, enemy);
}
else if (Input.GetKeyDown(KeyCode.Alpha3))
{
poisonedBlade.UseSkill(player, enemy);
}
}
}
通過這種方式,你可以實現不同敵人角色的技能,並且通過接口和多態性的設計,讓技能系統靈活可擴展。同時,你也可以為每個角色設計專屬的技能並輕鬆調整屬性。這些技能有相應的持續效果、狀態變化和邏輯,非常適合奇幻背景的遊戲設計。